package work.jame.blog.framework.utils.redis;

import work.jame.blog.framework.constant.RedisKeyPrefixConstant;

/**
 * reids 工具类
 *
 * @author Jame!
 * @date 2023/5/9 下午 10:37
 */
public class RedisUtils {

    /**
     * 获取登录用户key
     *
     * @param userId 用户id
     * @return 拼接后的redis key
     */
    public static String getLoginKey(Long userId) {
        return RedisKeyPrefixConstant.LOGIN_USER_TOKEN_PREFIX + userId;
    }


    /**
     * 获取用户登录失败后ip key
     *
     * @param ip 用户ip
     * @return 拼接后的redis key
     */
    public static String getUserLoginFailIpKey(String ip) {
        return RedisKeyPrefixConstant.LOGIN_FAIL_IP_PREFIX + ip;
    }


    /**
     * 获取用户登录失败后用户邮箱 key
     *
     * @param email 用户邮箱
     * @return 拼接后的redis key
     */
    public static String getUserLoginFailEmailKey(String email) {
        return RedisKeyPrefixConstant.LOGIN_FAIL_EMAIL_PREFIX + email;
    }


    /**
     * 获取用户登录验证码key
     *
     * @param email 用户邮箱
     * @return 拼接后的redis key
     */
    public static String getUserLoginCodeKey(String email) {
        return RedisKeyPrefixConstant.LOGIN_CODE_PREFIX + email;
    }

    /**
     * 获取用户登录邮箱验证码key
     *
     * @param email 用户邮箱
     * @return 拼接后的redis key
     */
    public static String getUserLoginEmailCodeKey(String email) {
        return RedisKeyPrefixConstant.LOGIN_EMAIL_CODE_PREFIX + email;
    }




    /**
     * 获取用户注册验证码key
     *
     * @param email 用户邮箱
     * @return 拼接后的redis key
     */
    public static String getUserRegisterCodeKey(String email) {
        return RedisKeyPrefixConstant.REGISTER_CODE_PREFIX + email;
    }


    /**
     * 获取用户注册邮箱验证码key
     *
     * @param email 用户邮箱
     * @return 拼接后的redis key
     */
    public static String getUserRegisterEmailCodeKey(String email) {
        return RedisKeyPrefixConstant.REGISTER_EMAIL_CODE_PREFIX + email;
    }


    /**
     * 获取用户找回密码验证码key
     *
     * @param email 用户邮箱
     * @return 拼接后的redis key
     */
    public static String getFindPasswordCodeKey(String email) {
        return RedisKeyPrefixConstant.FIND_PASSWORD_CODE_PREFIX + email;
    }


    /**
     * 获取用户找回密码邮箱验证码key
     *
     * @param email 用户邮箱
     * @return 拼接后的redis key
     */
    public static String getFindPasswordEmailCodeKey(String email) {
        return RedisKeyPrefixConstant.FIND_PASSWORD_EMAIL_CODE_PREFIX + email;
    }



    /**
     * 获取用户模式请求限流key
     *
     * @param userId     用户id
     * @param requestURI 请求路径
     * @return 拼接后的redis key
     */
    public static String getRequestLimitUserModeKey(Long userId, String requestURI) {
        return RedisKeyPrefixConstant.REQUEST_LIMIT_USER_PREFIX + userId + requestURI;
    }

    /**
     * 获取ip模式请求限流key
     *
     * @param ip         客户端ip
     * @param requestURI 请求路径
     * @return 拼接后的redis key
     */
    public static String getRequestLimitIpModeKey(String ip, String requestURI) {
        return RedisKeyPrefixConstant.REQUEST_LIMIT_IP_PREFIX + ip + requestURI;
    }


    /**
     * 获取太多请求限流ip key
     *
     * @param ip 客户端ip
     * @return 拼接后的redis key
     */
    public static String getTooManyRequestLimitIpKey(String ip) {
        return RedisKeyPrefixConstant.TOO_MANY_REQUEST_HANDLER_LIMIT_IP_PREFIX + ip;
    }


    /**
     * 获取禁止请求ip key
     *
     * @param ip 客户端ip
     * @return 拼接后的redis key
     */
    public static String getDisableRequestIpKey(String ip) {
        return RedisKeyPrefixConstant.DISABLE_REQUEST_IP_PREFIX + ip;
    }


    /**
     * 获取白名单ip key
     *
     * @param ip 客户端ip
     * @return 拼接后的redis key
     */
    public static String getWhiteListIpKey(String ip) {
        return RedisKeyPrefixConstant.WHITE_LIST_IP_PREFIX + ip;
    }


    /**
     * 获取白名单userId key
     *
     * @param userId 用户id
     * @return 拼接后的redis key
     */
    public static String getWhiteListUserIdKey(Long userId) {
        return RedisKeyPrefixConstant.WHITE_LIST_USER_ID_PREFIX + userId;
    }


    /**
     * 获取黑名单ip key
     * @param ip 客户端ip
     * @return 拼接后的redis key
     */
    public static String getBlackListIpKey(String ip) {
        return RedisKeyPrefixConstant.BLACK_LIST_IP_PREFIX + ip;
    }


}
